View Javadoc

1   package uba.db;
2   
3   import uba.db.column.CharColumnSpecification;
4   import uba.db.column.ColumnConstraint;
5   import uba.db.column.IntegerColumnSpecification;
6   import uba.db.table.TableSchema;
7   import uba.db.table.TableSchemaBuilder;
8   
9   /***
10   * Esta clase brinda constantes con los esquemas que deben tener las tablas del
11   * sistema.
12   * 
13   * @version $Revision: 1.3 $
14   */
15  public final class SystemTableSchemas {
16      /***
17       * Tamaņo maximo de los "nombres" (nombre de tabla, nombre de columna, etc).
18       */
19      private static final int MAX_NAME_CHARS = 64;
20  
21      /***
22       * Retorna el esquema que debe tener la tabla de sistema <b>sys_tables</b>.<br>
23       * El cual esta definido como:
24       * <ul>
25       * <li><b>tableId</b> (PK): identificador de la tabla</li>
26       * <li><b>name</b> ({@link #MAX_NAME_CHARS}, UNIQUE): nombre de la tabla</li>
27       * <li>
28       */
29      public static final TableSchema TABLES_SCHEMA = createTablesSchema();
30  
31      /***
32       * Retorna el esquema que debe tener la tabla de sistema <b>sys_columns</b>.<br>
33       * El cual esta definido como:
34       * <ul>
35       * <li><b>tableId</b> (PK): identificador de la tabla al que pertenece la
36       * columna</li>
37       * <li><b>columnId</b> (PK): identificador de la tabla al que pertenece la
38       * columna</li>
39       * <li><b>name</b> ({@link #MAX_NAME_CHARS}): nombre de la
40       * columna</li>
41       * <li><b>dataTypeId</b> (NOT NULL): identificador con el tipo de la
42       * columna, ver {@link #DATATYPES_SCHEMA}</li>
43       * <li>
44       */
45      public static final TableSchema COLUMNS_SCHEMA = createColumnsSchema();
46  
47      /***
48       * Retorna el esquema que debe tener la tabla de sistema <b>sys_datatypes</b>.<br>
49       * El cual esta definido como:
50       * <ul>
51       * <li><b>dataTypeId</b> (PK): identificador para este tipo de datos</li>
52       * <li><b>name</b> (10, NOT NULL): nombre descriptivo para este tipo de
53       * datos</li>
54       * <li>
55       */
56      public static final TableSchema DATATYPES_SCHEMA = createDataTypesSchema();
57  
58      private SystemTableSchemas() {}
59  
60      private static TableSchema createDataTypesSchema() {
61          TableSchemaBuilder builder = new TableSchemaBuilder("sys_datatypes");
62          builder.addColumn(new IntegerColumnSpecification("dataTypeId",
63                  ColumnConstraint.NOT_NULL));
64          builder.addColumn(new CharColumnSpecification("name", MAX_NAME_CHARS,
65                  ColumnConstraint.NOT_NULL));
66          builder.addPrimaryKeyConstraintTo("dataTypeId");
67          builder.addUniqueConstraintTo("name");
68  
69          return builder.build();
70      }
71  
72      private static TableSchema createColumnsSchema() {
73          TableSchemaBuilder builder = new TableSchemaBuilder("sys_columns");
74          builder.addColumn(new IntegerColumnSpecification("tableId",
75                  ColumnConstraint.NOT_NULL));
76          builder.addColumn(new IntegerColumnSpecification("columnId",
77                  ColumnConstraint.NOT_NULL));
78          builder.addColumn(new CharColumnSpecification("name", MAX_NAME_CHARS,
79                  ColumnConstraint.NOT_NULL));
80          builder.addColumn(new IntegerColumnSpecification("dataTypeId",
81                  ColumnConstraint.NOT_NULL));
82          builder.addPrimaryKeyConstraintTo("tableId");
83          builder.addPrimaryKeyConstraintTo("columnId");
84  
85          return builder.build();
86      }
87  
88      private static TableSchema createTablesSchema() {
89          TableSchemaBuilder builder = new TableSchemaBuilder("sys_tables");
90          builder.addColumn(new IntegerColumnSpecification("tableId",
91                  ColumnConstraint.NOT_NULL));
92          builder.addColumn(new CharColumnSpecification("name", MAX_NAME_CHARS,
93                  ColumnConstraint.NOT_NULL));
94          builder.addPrimaryKeyConstraintTo("tableId");
95          builder.addUniqueConstraintTo("name");
96  
97          return builder.build();
98      }
99  }